package main

import "fmt"

func forbreak() {
	for i := 0; i < 10; i++ {
		for j := 0; j < 10; j++ {
			if j == 2 {
				// 设置退出标签,只退出内层for循环
				break
			}
			fmt.Printf("%v-%v\n", i, j)
		}
	}
}

func forbreakall() {
	for i := 0; i < 5; i++ {
		for j := 0; j < 5; j++ {
			if j == 2 {
				// 设置退出标签
				goto breakTag
			}
			fmt.Printf("%v-%v\n", i, j)
		}
	}
	return
	// 标签
breakTag:
	fmt.Println("结束for循环")
}

func breakDemo1() {
BREAKDEMO1:
	for i := 0; i < 10; i++ {
		for j := 0; j < 10; j++ {
			if j == 2 {
				break BREAKDEMO1
			}
			fmt.Printf("%v-%v\n", i, j)
		}
	}
	fmt.Println("...")
}

func continueDemo() {
forloop1:
	for i := 0; i < 5; i++ {
		// forloop2:
		for j := 0; j < 5; j++ {
			if i == 2 && j == 2 {
				continue forloop1
			}
			fmt.Printf("%v-%v\n", i, j)
		}
	}
}

func main() {
	fmt.Println("跳出内层for,外层也退出：")
	forbreakall()
	fmt.Println("跳出内层for,外层再次继续：")
	forbreak()
	/* 	break语句还可以在语句后面添加标签，表示退出某个标签对应的代码块，
	   	标签要求必须定义在对应的for、switch和 select的代码块上 */
	fmt.Println("break：")
	breakDemo1()
	fmt.Println("continue：")
	continueDemo()

}
